package com.sx.demo.controller;


import com.sx.demo.dto.FileUploadDTO;
import com.sx.demo.dto.FileUploadRequestDTO;
import com.sx.demo.thread.SilceFileUploadThread;
import com.sx.frame.common.Result;
import org.apache.tomcat.util.threads.TaskThreadFactory;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.concurrent.*;

@RestController
public class FileUploadController {

    @Autowired
    private ThreadPoolExecutor threadPoolExecutor;

    @PostMapping("/smallUpload")
    public Result<?> upload(@RequestParam MultipartFile file) {
        if (!"png".equals(file.getContentType()) ||  !"jpg".equals(file.getContentType())){
            return Result.error("文件格式错误");
        }
        if (file.getSize() > 1024 * 1024 * 2){
            return Result.error("文件过大");
        }
        //文件重新命名，并去除源文件中的特殊字符防止被遍历（如\ /等），
        //文件保存到本地
        //文件信息保存到数据库中，包括名称映射等

        return Result.OK();
    }


    @PostMapping("/sliceUpload")
    public Result<?> sliceUpload(@RequestParam FileUploadRequestDTO file) {
       
        if (file.getSize() > 1024 * 1024 * 2){
            return Result.error("文件过大");
        }
        //文件重新命名，并去除源文件中的特殊字符防止被遍历（如\ /等），
        FileUploadDTO fileUploadDTO = null;
        Future<FileUploadDTO> submit = threadPoolExecutor.submit(new SilceFileUploadThread(file));
        try {
            fileUploadDTO = submit.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            throw new RuntimeException(e);
        }

        //文件保存到本地
        //文件信息保存到数据库中，包括名称映射等

        return Result.OK(fileUploadDTO);
    }



}
